package jm.nj.demo06main.demo04;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;

/*
 * java.lang.System:System类包含一些有用的类字段和方法
 * 它不能实例化,因为私有了构造方法
 * */
public class DemoSystem {
    public static void main(String[] args) {
        //method_1();
       // method_2();
        //method_3();
        //method_4();
        method_5();


    }
/*
* static void arraycopy(Object src,int srcPos, Object dest, int destPos, int length)
* 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
* 参数:
*       src - 源数组.
*       srcPos - 源数组中的起始位置.
*       dest - 目标数组.
*       destPos - 目标数组中的起始位置.
*       length - 要复制的数组元素的数量
* */
    private static void method_5() {
        int[] srcArr = {1,2,3,4,5};

        int[] destArr = new int[3];
        System.out.println("-----复制前遍历数组----");
        for (int i = 0; i < destArr.length; i++) {
            System.out.println(destArr[i]);
        }
        System.arraycopy(srcArr, 0, destArr, 0, 2);
        System.out.println("-------复制后遍历数组------");
        //增强for
        for(int i :destArr){
            System.out.println(i);
        }
        System.out.println("-------全部复制数组-----------");
        int[] destArr2 = new int[srcArr.length];
        System.arraycopy(srcArr,0,destArr2,0,srcArr.length);
        System.out.println(Arrays.toString(destArr2));

    }


    /*
* objcet类中的方法
* protected void finalizd() 垃圾回收器确定不存在对该对象的更多引用时，由对象的垃圾回收器调用此方法。
* static void gc()运行垃圾回收器
* JVM在内存中,收取对象垃圾
* gc()就相当于调用对象本身的finalize方法进行垃圾回收
* 注意:Jvm在空闲时也会调用gc()方法回收垃圾,所以如果手动调用gc方法相当于和JVM抢垃圾(有可能抢不到)
* */
    private static void method_4() {
        new Person();
        new Person();
        new Person();
        new Person();
        System.gc();
    }

    /*
*
* static Properties getProperties()返回当前操作系统的属性
*  file.separator 文件分隔符（在 UNIX/Linux 系统中是“/”） windows:\
 * path.separator 路径分隔符（在 UNIX/Linux 系统中是“:”） windows:分号;
 * line.separator 行分隔符（在 UNIX/Linux 系统中是“/n”）  windows:\r\n
 * os.name 操作系统的名称
 * static String getProperty(String key)根据参数的指示,获取相关的系统属性
* */
    private static void method_3() {
        System.out.println(System.getProperties());
        System.out.println(System.getProperty("os.name"));
        System.out.println(System.getProperty("line.separator"));
        System.out.println(System.getProperty("path.separator"));
        System.out.println(System.getProperty("file.separator"));



    }

    /*
     * System静态方法
     *   static void exit(int static)    结束JVM
     *  status:传递的是0,正常终止;传递其他,非正常终止
     * */
    private static void method_2() {
        int i= 0;
        while (true){
            i++;
            System.out.println("学习中");
            if(i==1000){
                System.exit(0);
            }
        }
    }

    /*
     * System静态方法:static long currentTimeMillis()返回1970年1月1日0点 到现在的毫秒值 等同于
     * new Date().getTime() 作用:可以测试程序效率
     * */
    private static void method_1() {
        long s = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            for (int j = 0; j < 1000; j++) {
                System.out.println(j);
            }

        }
        long e = new Date().getTime();
        System.out.println(e - s);
    }
}
